【GAになった!】一般提供開始のAWS IoT Analyticsを使ってデバイスデータを分析してみた
まいど、大阪の市田です。
昨年のre:Inventで発表されていた新サービス「AWS IoT Analytics」が遂にGAになりました!!
そこで今回は、AWSドキュメントで公開されているクイックスタートガイドを通して基本的な動作を確認してみたいと思います。
AWS IoT Analytics Console Quickstart Guide - AWS IoT Analytics
AWS IoT Analyticsについては、下記を参照して頂ければと思います。
- What Is AWS IoT Analytics? - AWS IoT Analytics
- 【レポート】AWS IoT Analytics #reinvent #IOT211 | Developers.IO
- 【速報】デバイスデータの分析を容易に!AWS IoT Analyticsが発表されました! #reinvent | Developers.IO
チャネルの作成
まずは、AWS IoT Analyticsを利用できるリージョンに移動しましょう。今回はオレゴンリージョンを使ってみます。
オレゴンリージョンに移動できたら、最初に「チャネル」を作成します。
チャネルIDは適当なものを設定(今回はmy_channel
)しましょう。「rawデータを保持する期間の設定」は今回はデフォルトのまま進めます。
次にトピックフィルタを設定します。ここも適当なトピックを指定します。ドキュメントではupdate/environment/dht1
を指定していましたが、今回はmyiot/analytics/test
を指定しました。他意はありません。
トピック名を入力したら「メッセージの表示」をクリックしてアクティブにしておきます。
次にIoT Coreが作成したチャネルにメッセージを送るためのIAM Roleを作成します。今回は新規作成としました。
ロール名を付けて作成します。
作成したIAM Roleを選択していることを確認して次に進みましょう。
これでチャネルの作成は完了です。
ちなみにチャネルはMQTTトピックからデータを収集するものなので、作成するとAWS IoT側で「メッセージをIoT Analyticsに送るルールアクション」が作成されます。
データストアの作成
次にデータストアの作成を行います。IoTデバイスから送られてきたメッセージ(データ)がここで作成したデータストアに蓄積されます。
マネジメントコンソールから「データストア」をクリックして移動しましょう。
「データストアを作成」をクリックして進めます。
データストアのIDを入力します。今回は「my_datastore」としました。「処理済みデータを保持する期間の設定」はデフォルトのまま次に進みます。適宜設定して下さい。
これでデータストアの作成は完了です。
パイプラインの作成
ここでは、作成したチャネルとデータストアをつなぐ為のパイプラインを作ります。
マネジメントコンソールから「パイプライン」を選択して「パイプラインの作成」をクリックします。
これまでと同じようにパイプラインのIDを決めましょう。今回は「my_pipeline」にしました。
その下にあるパイプラインソースから、最初に作成したチャネル(my_channel
)を選択します。
次にパイプラインアクティビティを定義します。
今回は指定したチャネルでデータを収集して、指定したデータストアにデータを送るだけのシンプルなパイプラインになるため、下記のようなアクティビティを定義したJSONファイルを用意します。
channelName
とdatastoreName
は、これまでに作成した各ID名と合わせておきましょう。
[ { "channel": { "name": "my_channel_activity", "channelName": "my_channel", "next": "my_datastore_activity" } }, { "datastore": { "name": "my_datastore_activity", "datastoreName": "my_datastore" } } ]
適当な名前でこのファイルを保存したら、画面のリンクをクリックしてアップロードします。
アップロードできたら次に進みましょう。
次の「パイプラインアクティビティ」では、今回は何も指定せずにそのまま次に進みます。ここでLambdaを呼び出したりして、複雑な処理を実行することもできます。
次にデータの送信先とするデータストアを指定します。
先程作成したmy_datastore
を選択します。
「パイプラインの作成」をクリックして完了です。
ここまでの作業で、「指定したチャネルで収集したデータをデータストアに保存」できるようになりました。次に保存したデータに対してクエリを実行して分析してみたいと思います。
データセットの作成
データセットとは、データストアに保存されたデータに対してSQLクエリの結果のことです。ここでは分析対象のデータストアとSQLクエリについて設定します。
データセットのIDを決めて、対象となるデータストアを選択します。
次に分析したい内容をSQLで記載します。今回は下記のようなSQLを実行してみたいと思います。
センサーデータとして「デバイスID、温度、湿度、時刻」を取得する想定です。
SELECT thingid, temperature, humidity, datetime FROM my_datastore
尚、利用できるSQLクエリはAmazon Athenaと同じものが使えます。
スケジュール設定は「無し」とします。
ちなみに、下記のようにスケジュールを設定することが可能です。
これでデータセットの作成が完了しました。
SQLでデータを分析してみる
それでは、実際にSQLを使って分析してみたいと思います。AWS IoTのマネジメントコンソールに移動して、「テスト」をクリックします。
Publishするトピックはチャネルで指定したもの(myiot/analytics/test
)を入力しましょう。メッセージの内容は下記の様なメッセージとします。
{ "thingid": "dht1", "temperature": 26, "humidity": 29, "datetime": "2018-01-26T07:06:01" }
トピックとメッセージ内容が入力できたら「トピックに発行」をクリックしてメッセージをPublishします。
次に、先程作成したデータセットの画面に戻ります。作成したデータセットをクリックして下さい。
画面右上の「アクション」から「今すぐクエリを実行」をクリックします。
すると、画面左上のステータスが「作成中」に変わります。メッセージ数が1件だけなのですぐに終わると思います。
正常にデータセットの作成が完了すると先程のステータスが「成功」に変わります。またプレビューにSQLで抽出された内容が表示されています。
結果はCSVでダウンロードすることも可能です。
上記ではPublishしたデータが1つだけだったので、デバイスIDや温度などを変えてメッセージをいくつかPublishしてみます。
複数のデータをPublishできたら、WHERE句を使って「温度が30度以上」のデータを抽出してみます。
先程と同様にクエリを実行します。
temperature
が30よりも大きいデータを正しく抽出できました。
最後に
今回は「何ができるのか」ということを簡単に追いかけてみました。この他にもSageMakerのノートブックインスタンスと連携したデータ分析や、QuickSightとの連携も可能です。
パイプラインアクティビティを使ったデータ処理もできるようなので、色々触って研究したいと思います!!
以上です。